package com.lframework.xingyun.basedata.mappers;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.lframework.starter.web.core.mapper.BaseMapper;
import com.lframework.xingyun.basedata.entity.Coupon;
import com.lframework.xingyun.basedata.vo.coupon.QueryCouponVo;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 * 卡券信息 Mapper 接口
 * </p>
 *
 */
@Mapper
public interface CouponMapper extends BaseMapper<Coupon> {

    /**
     * 查询列表
     * @param vo
     * @return
     */
    default IPage<Coupon> queryPage(QueryCouponVo vo) {
        return defaultJoinWrapper()
                .in(StrUtil.isNotBlank(vo.getCouponTypes()), Coupon::getCouponType, StrUtil.split(vo.getCouponTypes(), StrUtil.COMMA))
                .in(StrUtil.isNotBlank(vo.getSendWays()), Coupon::getSendWay, StrUtil.split(vo.getSendWays(), StrUtil.COMMA))
                .in(StrUtil.isNotBlank(vo.getAvailables()), Coupon::getAvailable, StrUtil.split(vo.getAvailables(), StrUtil.COMMA).stream()
                        .filter(StrUtil::isNotBlank).map(Boolean::valueOf).collect(Collectors.toList()))
                .like(StrUtil.isNotBlank(vo.getCouponName()), Coupon::getCouponName, vo.getCouponName())
                .orderByDesc(Coupon::getId)
                .page(PageDTO.of(vo.getPageIndex(), vo.getPageSize()));
    }

    default List<Coupon> queryList(QueryCouponVo vo) {
        return defaultJoinWrapper()
                .in(StrUtil.isNotBlank(vo.getCouponTypes()), Coupon::getCouponType, StrUtil.split(vo.getCouponTypes(), StrUtil.COMMA))
                .in(StrUtil.isNotBlank(vo.getSendWays()), Coupon::getSendWay, StrUtil.split(vo.getSendWays(), StrUtil.COMMA))
                .in(StrUtil.isNotBlank(vo.getAvailables()), Coupon::getAvailable, StrUtil.split(vo.getAvailables(), StrUtil.COMMA).stream()
                        .filter(StrUtil::isNotBlank).map(Boolean::valueOf).collect(Collectors.toList()))
                .like(StrUtil.isNotBlank(vo.getCouponName()), Coupon::getCouponName, vo.getCouponName())
                .orderByDesc(Coupon::getId)
                .list();
    }
}

